const APP_ID = 'XXXXXXXXXXXXXXXXXXXX' // 公众号唯一标志

// 官方文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

/**
 * 微信网页授权
 * */
function authorize(url, type = 1, state = 'share') {
  // code和用户id传给后端
  if (!isWeiChat()) return
  let token = uni.getStorageSync('token')
  if (!token) {
    //没有微信用户信息，没有授权-->> 需要授权，跳转授权页面
    // 微信内部鉴权地址
    let weixinUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize' +
      '?appid=' + APP_ID +
      '&redirect_uri=' + encodeURIComponent(url) + // 授权后重定向的回调链接地址， 请使用完整地址`${window.location.protocol}//${window.location.host}/pages/middle/index`
      '&response_type=code' + // 返回类型，请填写code
      '&scope=' + (type ? 'snsapi_userinfo' : 'snsapi_base') +
      '&state=' + state + // 重定向后会带上state参数，开发者可以填写a-zA-Z0-9的参数值，最多128字节
      '&time=' + new Date().getTime() +
      '#wechat_redirect';
    //state	否	重定向后会带上state参数，开发者可以填写a-zA-Z0-9的参数值，最多128字节
    // var code = getQueryString('code');
    // console.log('code',code)
    console.log(weixinUrl)
    window.location.replace(weixinUrl);
  }
}

/**
 * 判断是否微信浏览器环境
 * */
function isWeiChat() {
  const ua = navigator.userAgent.toLowerCase();
  const isWeixin = ua.indexOf('micromessenger') != -1;
  return isWeixin ? true : false;
}

/**
 * 判断是否ios终端
 * */
function isIOS() {
  const u = navigator.userAgent;
  return !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
}

/**
 * 加载script
 * @param {String} url -- 链接
 */
function loadScript(url = '//res.wx.qq.com/open/js/jweixin-1.4.0.js') {
  return new Promise((resolve, reject) => {
    // if (window.wx) resolve(wx)
    let _head = document.getElementsByTagName('head')[0];
    let _script = document.createElement('script');
    _script.setAttribute('type', 'text/javascript');
    _script.setAttribute('src', url);
    _head.appendChild(_script);
    _script.onload = function() {
      resolve(window.wx);
    };
    _script.onerror = function(err) {
      reject(err);
    };
  });
}


function initShare(config, options, success = () => 0, cancel = () => 0) {
  if (!isWeiChat()) return;
  return new Promise((resolve, reject) => {
    loadScript().then(wx => {
      // 请求数据
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: config.appId, // 必填，公众号的唯一标识
        timestamp: config.timestamp, // 必填，生成签名的时间戳
        nonceStr: config.nonceStr, // 必填，生成签名的随机串
        signature: config.signature, // 必填，签名
        jsApiList: [
          'onMenuShareTimeline',
          'onMenuShareAppMessage',
          'updateAppMessageShareData',
        ] // 必填，需要使用的JS接口列表
      });
      wx.ready(function() {
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        // // 老版接口
        wx.onMenuShareTimeline({
          title: options.title || '商城', // 分享时的标题
          desc: options.description || '', // 分享描述
          link: encodeURI(options.link || 'https://www.baidu.com/'), // 分享时的链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: options.imgUrl || '', // 分享时显示的图标
          success,
          //用户取消分享后执行的回调函数
          cancel
        });
        wx.onMenuShareAppMessage({
          title: options.title || '商城', // 分享时的标题
          desc: options.description || '', // 分享描述
          link: encodeURI(options.link || 'https://www.baidu.com/'), // 分享时的链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: options.imgUrl || '', // 分享时显示的图标
          success,
          //用户取消分享后执行的回调函数
          cancel
        });
        // 新版微信分享接口
        wx.updateAppMessageShareData({
          title: options.title || '商城', // 分享时的标题
          desc: options.description || '', // 分享描述
          link: encodeURI(options.link || 'https://www.baidu.com/'), // 分享时的链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: options.imgUrl || '', // 分享时显示的图标
          success,
          //用户取消分享后执行的回调函数
          cancel
        });
        wx.updateTimelineShareData({
          title: options.title || '商城', // 分享时的标题
          desc: options.description || '', // 分享描述
          link: encodeURI(options.link || 'https://www.baidu.com/'), // 分享时的链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: options.imgUrl || '', // 分享时显示的图标
          success,
          //用户取消分享后执行的回调函数
          cancel
        });
        resolve()
      });
      wx.error(function(err) {
        // 更新签名
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
        reject(err)
      });
    }).catch(e => reject(e))
  })
}

export default {
  isIOS,
  isWeiChat,
  initShare,
  authorize
}
